//路由鉴权，项目中什么路由什么时候能被访问，什么时候不能被访问
//全局守卫，项目中任意路由切换都会触发的钩子
import router from './router'
import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'
//不用加载那个小圆条
nprogress.configure({ showSpinner: false })
//获取用户相关的小仓库内部token数据，去判断用户是否登录成功
import useUserStore from './stores/modules/user'
import pinia from './stores'
// import setting from "./setting";
const userStore = useUserStore(pinia)
//全局前置守卫
router.beforeEach(async (to: any, from, next) => {
  // document.title=`${setting.title}-${to.meta.title}`
  //to:你将要访问那个路由
  //from你从哪里来
  //next放行函数
  //进度条开始
  nprogress.start()
  //获取用户token,去判断用户是否登录
  const token = userStore.token
  const username = userStore.username
  if (token) {
    //如果用户登录成功，访问login，不能访问，跳转到首页
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      //登录成功，不是去登录页面
      if (username) {
        next()
      } else {
        try {
          //获取用户信息
          await userStore.userInfo()
          //放行
          // console.log(`1`+userStore);

          //万一:刷新的时候是异步路由,有可能获取到用户信息、异步路由还没有加载完毕,出现空白的效果
          next()
        } catch {
          //token过期:获取不到用户信息了
          //用户手动修改本地存储token
          //退出登录->用户相关的数据清空
          await userStore.logoOut()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    //用户未登录
    //如果用户想去登录页面，那么放行
    if (to.path == '/login') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})
//全局后置守卫
router.afterEach(() => {
  //进度条结束
  nprogress.done()
})
//用户未登录，可以访问login路由，其他路由不能访问
//用户登录成功，不能访问login，如果访问login，那么指向首页，其他路由可以访问
